﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPNETVN.PORTAL.Components.UI;
using System.IO;
using ASPNETVN.PORTAL.Components.Share;
using CDTM.Modules.TraCuuDiem.Components;
using System.Collections;
using System.Data;
using ASPNETVN.PORTAL.Components.Security;
using Microsoft.Office.Core;
using System.Data.OleDb;
using System.Data;

namespace CDTM.Modules.TraCuuDiem.Controls
{
    public partial class AddEditKetQuaHocTapHocPhan : AddEditItemControl
    {
        private static int HeDaoTaoID, NamHocID, HocKyID, HocPhanID;

        private Components.Global.ExcelTemplate templateInfo = new Global.ExcelTemplate();

        private string _type = "Import"; //Or Export.

        public string Type
        {
            get
            {
                _type = Request.QueryString["type"];

                if (_type == null || _type == "")
                {
                    _type = "Import";
                }

                return _type;
            }
            set { _type = value; }
        }

        protected override void OnInit(EventArgs e)
        {
            this.Update += new EventHandler(AddEditDiemTotNghiep_Update);
            this.Delete += new EventHandler(AddEditDiemTotNghiep_Delete);
            base.OnInit(e);

            GetLog();
        }

        void AddEditDiemTotNghiep_Delete(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        void AddEditDiemTotNghiep_Update(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            /*
            if (ExcelApp == null)
            {
                ExcelApp = new Excel.ApplicationClass();
            }

            //Lấy file mẫu Excel & dữ liệu tương ứng được chọn
            templateInfo = Global.GetExcelTemplate(Global.TraCuuDiemType.KetQuaHocTap);

            pnlImport.Visible = pnlExport.Visible = false;

            if (Type == "Export")
            {
                lblExportInfo.Text = templateInfo.TemplateFileName;
                pnlExport.Visible = true;
            }
            else
                pnlImport.Visible = true;
            */

            //Truoc khi load lai du lieu, neu dang chon thong tin tren page -> luu (danh dau) 
            //thong tin dang chon.
            if (ddlHeDaoTao.Items.Count > 0)
                HeDaoTaoID = int.Parse(ddlHeDaoTao.SelectedValue);

            if (ddlNamHoc.Items.Count > 0)
                NamHocID = int.Parse(ddlNamHoc.SelectedValue);

            if (ddlHocKy.Items.Count > 0)
                HocKyID = int.Parse(ddlHocKy.SelectedValue);

            if (ddlHocPhan.Items.Count > 0)
                HocPhanID = int.Parse(ddlHocPhan.SelectedValue);

            //Reload data
            ddlHeDaoTao.Items.Clear();
            ddlNamHoc.Items.Clear();
            ddlHocKy.Items.Clear();
            ddlHocPhan.Items.Clear();

            Guid moduleID = new Guid(Request.QueryString["mid"]);
            Global.LoadDanhMuc(moduleID, ref ddlHeDaoTao, this.Settings["HeDaoTao"].ToString());
            Global.LoadDanhMuc(moduleID, ref ddlNamHoc, this.Settings["NamHoc"].ToString());
            Global.LoadDanhMuc(moduleID, ref ddlHocKy, this.Settings["HocKy"].ToString());
            Global.LoadDanhMuc(moduleID, ref ddlHocPhan, this.Settings["HocPhan"].ToString());

            //Chon lai thong tin 
            if (ddlHeDaoTao.Items.Count > 0)
                ddlHeDaoTao.SelectedValue = HeDaoTaoID.ToString();
            if (ddlNamHoc.Items.Count > 0)
                ddlNamHoc.SelectedValue = NamHocID.ToString();
            if (ddlHocKy.Items.Count > 0)
                ddlHocKy.SelectedValue = HocKyID.ToString();
            if (ddlHocPhan.Items.Count > 0)
                ddlHocPhan.SelectedValue = HocPhanID.ToString();

            lblReadOnly.Visible = false;

            if (IsPostBack == false)
            {
                lblMessage.Text = string.Empty;
                //lblExportError.Text = "";
                pnlDetails.Visible = false;

                GetLog();
            }
        }

        protected void btnExport_Click(object sender, EventArgs e)
        {
            //Export();
        }

        protected void btnThucThi_Click(object sender, EventArgs e)
        {
            try
            {
                //1.
                lblMessage.Text = "1. Tải lên server file Excel.";

                if (ddlSheetName.SelectedIndex == -1)
                {
                    lblMessage.Text = "Chưa chọn tên 'Sheet'. Hãy kiểm tra lại!.";
                    return;
                }

                string fileUrl = Session["fileUrl"].ToString();

                if (fileUrl.Length == 0)
                {
                    if (!Global.ValidateFile(FileUploadAttachment, lblMessage))
                        return;

                    fileUrl = Global.UploadFile(FileUploadAttachment, lblMessage, "FILE", this.ModuleID.ToString(), true);
                }

                //Upload file thành công.
                if (fileUrl.Length != 0)
                {
                    //Kiểm tra thuộc tính ReadOnly -> Hiển thị thông báo.
                    if (Global.IsReadOnly(Server.MapPath(fileUrl)))
                    {
                        lblReadOnly.Text = "Tệp tin được thiết lập 'ReadOnly/ Chỉ đọc'.";
                        lblReadOnly.Visible = true;
                    }

                    //Lấy tên các Sheet.
                    //ArrayList listSheetName = Global.GetSheetNameList(Server.MapPath(fileUrl), lblMessage);
                    //if (listSheetName.Count == 0)
                    //    return;

                    //if (!Global.ValidateSheetName(listSheetName, ddlSheetName.SelectedItem.Text.Trim(), lblMessage))
                    //    return;

                    string sheetName = ddlSheetName.SelectedItem.Text;

                    //2.
                    lblMessage.Text = "2. Kiểm tra file có đúng định dạng file 'Excel' mẫu.";
                    //Kiểm tra file có đúng định dạng file 'Excel' mẫu?.                    
                    if (!Global.CheckSchema(Server.MapPath(fileUrl), sheetName, lblMessage, Global.TraCuuDiemType.DiemHocPhan))
                        return;

                    //3.
                    lblMessage.Text = "3. Lấy dữ liệu từ file Excel.";
                    //Lấy dữ liệu từ file Excel.
                    System.Data.DataTable data = Global.GetDataFromXLS(Server.MapPath(fileUrl), sheetName);
                    if (data == null)
                    {
                        lblMessage.Text = "Không đọc được dữ liệu từ Sheet '" + sheetName + "'";
                        return;
                    }

                    //Đọc dữ liệu từ DataTable -> trả về Collection object Tuyen sinh                
                    List<DiemHocPhan> collection = new List<DiemHocPhan>();
                    List<LogDetail> logDetails = new List<LogDetail>();

                    try
                    {
                        //4.
                        lblMessage.Text = "4. Chuyển đổi dữ liệu.";

                        //collection = Global.ExcelSheetReadHocTap(data, Global.HOCTAP_ROW_POSITION_GETVALUE, out logDetails);
                        collection = Global.ExcelSheetReadHocPhan(data, Convert.ToInt32(txtTuDong.Text),
                            Convert.ToInt32(txtDenDong.Text),
                            HeDaoTaoID,
                            NamHocID,
                            HocKyID,
                            HocPhanID,
                            out logDetails);

                        if (collection.Count == 0)
                        {
                            lblMessage.Text = "Không có bản ghi nào hoặc tệp 'Excel' không đúng mẫu quy định. Hãy kiểm tra lại!.";
                            return;
                        }
                    }
                    catch
                    {
                        lblMessage.Text = "Lỗi trong quá trình chuyển đổi dữ liệu.";
                    }

                    //Xóa dữ liệu rác
                    //5.
                    lblMessage.Text += "5. Xóa dữ liệu dư thừa.";
                    collection = DiemHocPhan.Clean(collection);

                    //Xóa tất cả dữ liệu cũ trước khi nhập khẩu theo tên 'LỚP'.
                    //6.
                    lblMessage.Text = "6. Xóa dữ liệu cũ.";
                    var arrLop = collection.GroupBy(x => x.Lop).Select(g => g.Key);

                    Guid moduleID = new Guid(Request.QueryString["mid"]);
                    //int heDaoTaoID = ddlHeDaoTao.SelectedValue != null ? Convert.ToInt32(ddlHeDaoTao.SelectedValue) : 0;
                    //int namHocID = ddlHeDaoTao.SelectedValue != null ? Convert.ToInt32(ddlNamHoc.SelectedValue) : 0;
                    //int hocKyID = ddlHeDaoTao.SelectedValue != null ? Convert.ToInt32(ddlHocKy.SelectedValue) : 0;
                    //int hocPhanID = ddlHeDaoTao.SelectedValue != null ? Convert.ToInt32(ddlHocPhan.SelectedValue) : 0;

                    foreach (string tenLop in arrLop)
                    {
                        DiemHocPhan.DeleteAllBy(moduleID, HeDaoTaoID, NamHocID, HocKyID, HocPhanID, tenLop);
                    }

                    //Cap nhat thong tin nguoi tao, ngay tao
                    for (int m = 0; m < collection.Count; m++)
                    {
                        DiemHocPhan item = collection[m];

                        item.ModuleID = moduleID;
                        item.CreatedByUser = PortalSecurity.CurrentUser.Identity.Email;
                        item.DateCreated = DateTime.Now;
                        item.ModifiedByUser = PortalSecurity.CurrentUser.Identity.Email;
                        item.DateModified = DateTime.Now;
                    }

                    //Ghi dữ liệu vào Database.   
                    //7.
                    lblMessage.Text = "7. Ghi dữ liệu vào Database.";
                    if (DiemHocPhan.InsertCollection(collection))
                    {
                        //Ghi lại nhật ký nhập khẩu dữ liệu.
                        Log log = new Log();
                        log.TraCuuDiemType = Global.TraCuuDiemType.DiemHocPhan.ToString();
                        log.DateCreated = DateTime.Now;
                        log.UserLogIn = PortalSecurity.CurrentUser.Identity.Email;
                        log.TotalRecords = collection.Count;
                        log.LogType = Global.LogType.Import.ToString();
                        log.FileName = Server.MapPath(fileUrl) + ".\nSố bản ghi lưu = "
                                + collection.Count + ", số bản ghi lỗi = " + logDetails.Count + ".";
                        log.Description = "Nhập khẩu " + Global.TraCuuDiemType.DiemHocPhan.ToString();

                        int logID = log.Insert();

                        //Lưu thông tin lỗi trong quá trình đọc dữ liệu từ file Excel.
                        foreach (LogDetail item in logDetails)
                        {
                            item.LogID = logID;
                        }

                        LogDetail.InsertCollection(logDetails);

                        GetLog();

                        lblMessage.Text = "8. Quá trình nhập khẩu dữ liệu thành công. <br/>Số bản ghi đã được lưu vào cơ sở dữ liệu: "
                            + collection.Count + ", số bản ghi lỗi: " + logDetails.Count + ". Xem nhật ký để biết thêm chi tiết.";
                    }
                }
            }
            catch (Exception ex)
            {
                lblMessage.Text = "8. Quá trình nhập khẩu dữ liệu không thành công.";
                lblMessage.Text += "<br/>" + ex.Message;
            }
            finally
            {
                Session["fileUrl"] = "";
            }
        }

        /// <summary>
        /// Lấy dữ liệu nhật ký.
        /// </summary>
        private void GetLog()
        {
            listLog = Log.SelectCollectionAll()
                .Where(x => x.TraCuuDiemType == Global.TraCuuDiemType.DiemHocPhan.ToString()
                && x.LogType == Type)
                .OrderByDescending(obj => obj.DateCreated).ToList();

            repLog.DataSource = listLog;
            repLog.DataBind();
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            this.ReturnToReferrerPage();
        }

        #region Log Paging
        public static List<Log> listLog;

        protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            repLog.PageIndex = ddl.SelectedIndex;
            repLog.DataSource = listLog;
            repLog.DataBind();
        }

        protected void repLog_DataBound(object sender, EventArgs e)
        {
            if (repLog.Rows.Count > 0)
            {
                // Retrieve the pager row.
                GridViewRow bottomPagerRow = repLog.BottomPagerRow;
                GridViewRow topPagerRow = repLog.TopPagerRow;

                // Retrieve the DropDownList and Label controls from the row.
                DropDownList topPageList = (DropDownList)topPagerRow.Cells[0].FindControl("PageDropDownList");
                DropDownList bottomPageList = (DropDownList)bottomPagerRow.Cells[0].FindControl("PageDropDownList");
                Label topPageLabel = (Label)topPagerRow.Cells[0].FindControl("PageLabel");
                Label bottomPageLabel = (Label)bottomPagerRow.Cells[0].FindControl("PageLabel");

                if (topPageList != null && bottomPageList != null)
                {
                    for (int i = 0; i < repLog.PageCount; i++)
                    {
                        int pageNumber = i + 1;
                        ListItem item = new ListItem(pageNumber.ToString());
                        if (i == repLog.PageIndex)
                        {
                            item.Selected = true;
                        }

                        topPageList.Items.Add(item);
                        bottomPageList.Items.Add(item);
                    }
                }

                if (topPageLabel != null && bottomPageLabel != null)
                {
                    topPageLabel.Text = bottomPageLabel.Text = " / " + repLog.PageCount.ToString();
                }
            }
        }

        protected void repLog_PageIndexChanged(object sender, EventArgs e)
        {
            repLog.SelectedIndex = -1;
        }
        #endregion

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            Log.DeleteLogDynamic("1=1");

            GetLog();
        }

        #region LogDetails Paging
        public static List<LogDetail> listLogDetails;

        protected void PageDropDownList2_SelectedIndexChanged(Object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            repLogDetails.PageIndex = ddl.SelectedIndex;
            repLogDetails.DataSource = listLogDetails;
            repLogDetails.DataBind();
        }

        protected void repLogDetails_DataBound(object sender, EventArgs e)
        {
            if (repLogDetails.Rows.Count > 0)
            {
                // Retrieve the pager row.
                GridViewRow bottomPagerRow = repLogDetails.BottomPagerRow;
                GridViewRow topPagerRow = repLogDetails.TopPagerRow;

                // Retrieve the DropDownList and Label controls from the row.
                DropDownList topPageList = (DropDownList)topPagerRow.Cells[0].FindControl("PageDropDownList2");
                DropDownList bottomPageList = (DropDownList)bottomPagerRow.Cells[0].FindControl("PageDropDownList2");
                Label topPageLabel = (Label)topPagerRow.Cells[0].FindControl("PageLabel2");
                Label bottomPageLabel = (Label)bottomPagerRow.Cells[0].FindControl("PageLabel2");

                if (topPageList != null && bottomPageList != null)
                {
                    for (int i = 0; i < repLogDetails.PageCount; i++)
                    {
                        int pageNumber = i + 1;
                        ListItem item = new ListItem(pageNumber.ToString());
                        if (i == repLogDetails.PageIndex)
                        {
                            item.Selected = true;
                        }

                        topPageList.Items.Add(item);
                        bottomPageList.Items.Add(item);
                    }
                }

                if (topPageLabel != null && bottomPageLabel != null)
                {
                    topPageLabel.Text = bottomPageLabel.Text = " / " + repLogDetails.PageCount.ToString();
                }
            }
        }

        protected void repLogDetails_PageIndexChanged(object sender, EventArgs e)
        {
            repLog.SelectedIndex = -1;
        }
        #endregion

        protected void repLog_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            HiddenField crl = (HiddenField)repLog.Rows[e.NewSelectedIndex].FindControl("hdfLogID");

            if (crl != null)
            {
                int logID = Convert.ToInt32(crl.Value);

                listLogDetails = LogDetail.SelectCollectionDynamic("LogID = " + logID, "");
                repLogDetails.DataSource = listLogDetails;
                repLogDetails.DataBind();
                pnlDetails.Visible = true;
            }
        }

        protected void btnLayTenSheet_Click(object sender, EventArgs e)
        {
            ddlSheetName.Items.Clear();

            if (!Global.ValidateFile(FileUploadAttachment, lblMessage))
                return;

            string fileUrl = Global.UploadFile(FileUploadAttachment, lblMessage, "FILE", this.ModuleID.ToString(), true);

            Session["fileUrl"] = fileUrl;

            //Lấy tên các Sheet.
            ArrayList listSheetName = Global.GetSheetNameList(Server.MapPath(fileUrl), lblMessage);
            if (listSheetName.Count == 0)
                return;

            for (int i = 0; i < listSheetName.Count; i++)
            {
                ddlSheetName.Items.Add(listSheetName[i].ToString());
            }

            ddlSheetName.Enabled = ddlSheetName.Items.Count > 0;

            btnThucThi.Visible = true;
        }

        #region EXPORT
        /*
        private Excel.ApplicationClass ExcelApp = null;
        private Hashtable ColumnMap = new Hashtable();
        private static int _stt = 0;

        private void Export()
        {
            try
            {
                if (!Global.CheckMSExcel())
                {
                    lblExportError.Text = "Ứng dụng MicroSoft Excel chưa cài đặt.";
                    return;
                }

                //Đọc, Export dữ liệu và Hiển thị 1 file Excel.
                OpenSheet(Global.TraCuuDiemType.KetQuaHocTap, templateInfo, false, lblExportError);

                //Đóng ứng dụng Excel
                Global.StopExcel();

                //Hiển thị hộp thoại download file đến người dùng.
                Response.Redirect("~//" + templateInfo.ExportFolder + "//" + templateInfo.TemplateFileName, false);
            }
            catch (Exception ex)
            {
                lblExportError.Text = "Quá trình xuất khẩu dữ liệu không thành công. Bạn hãy xem nhật ký để biết chi tiết."; //ex.StackTrace;
            }
        }
        /// <summary>
        /// Đọc, Export dữ liệu và Hiển thị 1 file Excel.
        /// </summary>
        /// <param name="traCuuDiemType">Loại tra cứu điểm sẽ truy vấn thông tin</param>
        /// <param name="templateInfo">Struct lưu thông tin file mẫu dùng để Export</param>
        /// <param name="lblErrorText">Nếu có bất kỳ lỗi nào xảy ra thì nên được hiển thị.</param>
        /// <param name="bShowResult">Có hiển thị file export không?</param>
        /// <returns>Trả về giá trị Boolean nếu Hàm thực hiện thành công.</returns>
        public bool OpenSheet(Global.TraCuuDiemType traCuuDiemType, Global.ExcelTemplate templateInfo,
            bool bShowResult, System.Web.UI.WebControls.Label lblErrorText)
        {
            ExcelApp.DisplayAlerts = false;
            Excel.Workbook workbook = null;
            Excel.Worksheet worksheet = null;

            object missing = System.Type.Missing;

            //Path file Mẫu chọn open
            string strFileName = templateInfo.TemplateFileFullPath;

            //Path file dùng lưu ra thư mục Expor.
            string sFileNameSave = templateInfo.ExportFolderPath + "\\" + templateInfo.TemplateFileName;

            //Dữ liệu dùng để Export
            DataTable templateData = Global.GetTemplateData(traCuuDiemType);

            try
            {
                //Kiểm tra file mẫu dùng để export data có tồn tại không?
                if (!System.IO.File.Exists(templateInfo.TemplateFileFullPath))
                {
                    lblExportError.Text = "File mẫu dùng để xuất khẩu dữ liệu không tồn tại.";
                    return false;
                }

                //Kiểm tra có dữ liệu export không?
                if (templateData == null)
                {
                    lblExportError.Text = "Dữ liệu xuất khẩu không tồn tại.";
                    return false;
                }

                //Kiểm tra vị trid folder chứa file export có tồn tại?
                if (!System.IO.File.Exists(templateInfo.ExportFolderPath))
                {
                    Global.CreateFolder(templateInfo.ExportFolderPath);
                }


                // Mở chế độ Write.
                workbook = ExcelApp.Workbooks.Open(strFileName, 2, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, true, 0, true, 1, 0);


                // Đọc Sheet 1 cua File Excel.
                worksheet = (Excel.Worksheet)workbook.Sheets[1];

                if (worksheet == null)
                {
                    lblErrorText.Text = "Sheet '" + worksheet.Name + "' không tồn tại.";
                }
                else
                {
                    WriteExcelData(worksheet, templateData, traCuuDiemType, lblErrorText);
                }

                try
                {
                    workbook.SaveAs(sFileNameSave,
                        Excel.XlFileFormat.xlWorkbookNormal, missing, missing,
                        false, false, Excel.XlSaveAsAccessMode.xlNoChange,
                        missing, missing, missing, missing, missing);

                    // Đóng chế độ Read.
                    workbook.Close(false, false, missing);
                    workbook = null;
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("Cannot access"))
                    {
                        lblErrorText.Text = "File chương trình đang mở. Bạn hãy đóng chương trình Excel trước khi thực hiện Export.";
                        return false;
                    }
                }

                if (bShowResult)
                {
                    ExcelApp.Visible = true;
                }
                else
                {
                    ExcelApp.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
                    ExcelApp = null;
                }

                //GC.GetGeneration(ExcelApp);
                GC.Collect(0, GCCollectionMode.Forced);

            }
            catch (Exception expInterop)
            {
                lblErrorText.Text = expInterop.ToString();

                return false;
            }

            return true;
        }

        /// <summary>
        /// Ghi dữ liệu ra một Sheet và hiển thị nó.
        /// </summary>
        /// <param name="objExcelSheet">Worksheet được hiển thị</param>
        /// <param name="templateData">Dữ liệu dùng để Export ra file Excel</param>
        /// <param name="traCuuDiemType">Loại tra cứu điểm sẽ truy vấn thông tin</param>
        /// <param name="lblErrText">Hiển thị bất kỳ lỗi nào xảy ra.</param>
        /// <returns>Trả về giá trị Control chứa thông tin của Worksheet</returns>
        public bool WriteExcelData(Excel.Worksheet objExcelSheet, System.Data.DataTable templateData,
            Global.TraCuuDiemType traCuuDiemType, System.Web.UI.WebControls.Label lblErrText)
        {
            int nMaxCol = ((Excel.Range)objExcelSheet.UsedRange).EntireColumn.Count;
            int nMaxRow = templateData.Rows.Count;

            //Vị trí dòng bắt đầu ghi dữ liệu ra file Excel.
            int iStartRow = GetRowPositionStart(traCuuDiemType);

            if (objExcelSheet == null)
            {
                return false;
            }

            try
            {
                Excel.Range theRange = null;
                int cnt = 0;
                _stt = 0;

                //Lặp qua các rows trong bảng dữ liệu lấy từ DB.
                for (int nRowIndex = 0; nRowIndex < 100; nRowIndex++)
                {
                    //Biến dếm số thứ tự
                    _stt += 1;

                    //Lặp qua các cột trong Excel mẫu
                    for (int nColIndex = 0; nColIndex <= nMaxCol; nColIndex++)
                    {
                        //Tạo Range/ Cell: từ nRowIndex + vị trí dòng bắt đầu ghi dữ liệu trong file Excel mẫu.
                        theRange = objExcelSheet.Cells.get_Range(
                            Global.GetExcelIndexToLetter(nColIndex) + (nRowIndex + iStartRow).ToString(),
                            Global.GetExcelIndexToLetter(nColIndex) + (nRowIndex + iStartRow).ToString());

                        //Lấy tên cột tương ứng giữa File Excel & Table Tuyển sinh
                        string columnName = GetColumnName(traCuuDiemType, nColIndex);

                        cnt = templateData.Columns.Cast<string>().Count((delegate(string name) { return name == columnName; }));

                        if (cnt > 0)
                        {
                            UpdateValueTuyenSinh(theRange, columnName, templateData.Rows[nRowIndex][columnName]);
                        }
                        else
                        {
                            if (columnName == "0")
                            {
                                theRange.Value2 = _stt;
                                theRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                            }
                            else
                                theRange.Value2 = DBNull.Value;
                        }
                    }

                    //Insert new row in Excel
                    Excel.Range row = theRange.Cells;

                    row.Insert(Excel.XlInsertShiftDirection.xlShiftDown, false);

                    //lblCounter.Text = string.Format("{0} bản ghi đã được ghi ra file.", _stt);
                }
            }
            catch (Exception ex)
            {
                lblErrText.Text = ex.ToString();
            }
            return true;
        }

        /// <summary>
        /// Lấy vị trí chèn dữ liệu dựa vào Kiểu tra cứu điểm.
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public int GetRowPositionStart(Global.TraCuuDiemType type)
        {
            int pos = 0;

            switch (type)
            {
                case Global.TraCuuDiemType.DiemTuyenSinh:
                    pos = Components.Global.TUYENSINH_ROW_POSITION_GETVALUE;
                    break;
                case Global.TraCuuDiemType.DiemTotNghiepCaoDang:
                    pos = Components.Global.TOTNGHIEP_CD_ROW_POSITION_GETVALUE;
                    break;
                case Global.TraCuuDiemType.DiemTotNghiepTrungCap:
                    pos = Components.Global.TOTNGHIEP_TC_ROW_POSITION_GETVALUE;
                    break;
                case Global.TraCuuDiemType.KetQuaHocTap:
                    pos = Components.Global.HOCTAP_ROW_POSITION_GETVALUE;
                    break;
                case Global.TraCuuDiemType.KetQuaRenLuyen:
                    pos = Components.Global.RENLUYEN_ROW_POSITION_GETVALUE;
                    break;
            }

            return pos;
        }

        /// <summary>
        /// Lấy tên cột dữ liệu dựa vào Kiểu tra cứu điểm.
        /// </summary>
        /// <param name="type">Kiểu tra cứu điểm</param>
        /// <param name="colIndex">Giá trị index tương ứng muốn lấy tên cột</param>
        /// <returns></returns>
        public string GetColumnName(Global.TraCuuDiemType type, int colIndex)
        {
            string colName = "";

            switch (type)
            {
                case Global.TraCuuDiemType.DiemTuyenSinh:
                    colName = ((Global.TuyenSinhColumnIndex)colIndex).ToString();
                    break;
                case Global.TraCuuDiemType.DiemTotNghiepCaoDang:
                    colName = ((Global.TotNghiepCaoDangColumnIndex)colIndex).ToString();
                    break;
                case Global.TraCuuDiemType.DiemTotNghiepTrungCap:
                    colName = ((Global.TotNghiepTrungCapColumnIndex)colIndex).ToString();
                    break;
                case Global.TraCuuDiemType.KetQuaHocTap:
                    colName = ((Global.HocTapColumnIndex)colIndex).ToString();
                    break;
                case Global.TraCuuDiemType.KetQuaRenLuyen:
                    colName = ((Global.RenLuyenColumnIndex)colIndex).ToString();
                    break;
            }

            return colName;
        }

        /// <summary>
        /// Cập nhật giá trị cho Range/ Cell theo tên thuộc tính
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="columnName"></param>
        /// <param name="value"></param>
        private void UpdateValueTuyenSinh(Excel.Range range, string columnName, object value)
        {
            try
            {
                System.Globalization.CultureInfo cul = new System.Globalization.CultureInfo("vi-vn");

                switch (columnName)
                {
                    case "SBD":
                    case "BTS":
                    case "DonVi":
                    case "MHS":
                    case "NgaySinh":
                    case "Tinh":
                    case "Huyen":
                    case "DoiTuong":
                    case "UuTien":
                    case "KhuVuc":
                    case "Mon1"://Toan
                    case "Mon2"://Ly
                    case "Mon3"://Hoa
                    case "Tong":
                        range.Value2 = value;
                        break;

                    case "HoTenLot":
                    case "Ten":
                    case "ChuyenNganh":
                        range.Value2 = value;
                        range.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                        break;

                    case "GioiTinh":
                        range.Value2 = Global.ConvertGender(Convert.ToBoolean(value));
                        break;
                }
            }
            catch (Exception ex) { throw ex; }
        }
        */
        #endregion

    }

}